﻿// ===============================================================================
// XCI.NET 西安交通信息WinForm开发框架 2018 版权所有
// ===============================================================================
using System;

namespace XCI.Logger
{
    /// <summary>
    /// 文件日志配置
    /// </summary>
    public class FileLoggerConfig
    {
        /// <summary>
        /// 日志输出级别，默认是Info(消息)级别。
        /// 打印次序：Debug(调试) → Info(消息) → Warn(警告) → Error(错误) → None(不输出)
        /// </summary>
        public LoggerLevel Level = LoggerLevel.Info;

        /// <summary>
        /// 消息模板
        /// {CallClass} 调用所在类
        /// {CallMethod} 调用所在方法
        /// {LogLevel}   日志级别
        /// {CreateDateTime} 创建日期
        /// {Tag} 标签
        /// {Message} 日志消息
        /// </summary>
        public string MessageTemplate { get; set; } = "{CallClass}.{CallMethod} {LogLevel} {CreateDateTime} {Tag} {Message}";

        /// <summary>
        /// 日志输出目录，默认为根目录下的Log目录（基于日期掩码）({root}软件输出根目录)
        /// <para>
        /// 按月建立文件夹：{root}\\Log\\{yyyy-MM}
        /// 按日建立文件夹：{root}\\Log\\{yyyy-MM-dd}
        /// </para>
        /// </summary>
        public string Dir { get; set; } = "{root}\\Log\\{yyyy-MM}";

        /// <summary>
        /// 日志文件名（基于日期掩码）,不含扩展名
        /// </summary>
        public string FileName { get; set; } = "{yyyy-MM-dd}";

        /// <summary>
        /// 文件大小限制，单位为K，0表示不限制，默认：200M（204800KB）
        /// 文件大小超过此大小时，文件会新建。
        /// </summary>
        public long FileSizeLimit { get; set; } = ((long)200 * 1024);

        /// <summary>
        /// 是否自动删除历史文件
        /// </summary>
        public bool AutoDelete { get; set; } = true;

        /// <summary>
        /// 自动删除多久之前的日志文件，默认：30天
        /// </summary>
        public TimeSpan AutoDeleteTimeSpan { get; set; } = TimeSpan.FromDays(30);

        /// <summary>
        /// 过期文件轮询时间间隔,默认:1小时
        /// </summary>
        public TimeSpan AutoDeleteInterval { get; set; } = TimeSpan.FromHours(1);

        /// <summary>
        /// 队列缓冲区大小,默认:10万
        /// </summary>
        public int QueueBufferSize { get; set; } = 100000;

        /// <summary>
        /// 文件写入缓冲区大小,默认:2000（如果写入文件缓冲区超过此值，则开始写入文件）
        /// </summary>
        public int WriteBufferSize { get; set; } = 2000;

        /// <summary>
        /// 文件写入间隔时间,默认:10秒（如果文件写入缓冲区未满，达到此时间时把文件写入缓存区的数据写入文件）
        /// </summary>
        public TimeSpan WriteInterval { get; set; } = TimeSpan.FromSeconds(10);
    }
}